export function useRandom() {
  /**
   * 生成随机码
   * @param {object} option 参数对象
   * @property {number} option.length 码长度 默认6
   * @property {string} option.mode 码类型 num全数字（默认） | abc全字母 | all字母数字混合
   * @property {number} option.chunkSize 分组长度 可选
   * @property {string} option.separator 分组分隔符 可选
   * @property {string} option.exclude 字符排除项 可选
   * @property {string} option.prefix 自定义前缀 可选
   * @property {string} option.suffix 自定义后缀 可选
   * @return {string} 生成的码
   */
  const code = (option) => {
    const opt = Object.assign(
      {
        length: 6,
        mode: 'num'
      },
      option
    )

    let characters = ''
    if (opt.mode === 'num') {
      characters = '0123456789'
    } else if (opt.mode === 'abc') {
      characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    } else {
      characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
    }

    // 排除部分字符
    if (opt.exclude) {
      characters = characters.replace(new RegExp(`[${opt.exclude}]`, 'g'), '')
    }

    let result = ''
    let formattedResult = ''

    // 生成随机字符串
    for (let i = 0; i < opt.length; i++) {
      result += characters.charAt(Math.floor(Math.random() * characters.length))
    }

    // 如果chunkSize或separator未定义，则不进行分组
    if (opt.chunkSize && opt.separator) {
      // 按照指定的chunkSize进行分组并插入separator
      for (let i = 0; i < result.length; i++) {
        if (i > 0 && i % opt.chunkSize === 0) {
          formattedResult += opt.separator
        }
        formattedResult += result[i]
      }
    } else {
      // 如果没有分组，直接使用原始的result
      formattedResult = result
    }

    // 前后缀
    if (opt.prefix) {
      formattedResult = opt.prefix + formattedResult
    }
    if (opt.suffix) {
      formattedResult = formattedResult + opt.suffix
    }

    return formattedResult
  }

  return {
    code
  }
}
